package com.myapp.war;

import java.util.HashMap;
import java.util.Map;

import com.myapp.war.beans.WarBean;
import com.myapp.war.beans.WarHeroBean;
import com.myapp.war.beans.WarTowerBean;

public class WarManage {

	private Map<Long, WarBean> warsContianer = new HashMap<Long, WarBean>();

	public void buildWar(long uid) {
		WarBean warBean = new WarBean(uid);
		warsContianer.put(uid, warBean);
	}

	/**
	 * 在指定的位置设置一个英雄
	 * 
	 * @param heroId
	 *            英雄id
	 * @param x
	 *            设置英雄的x轴
	 * @param y
	 *            设置英雄的y轴
	 * 
	 * @return 0: 成功； -1: 战斗不存在；-2此坐标已经存在一个英雄了；-3此玩家没有此英雄
	 */
	public int insertHero(long uid, int heroId, int x, int y) {
		// 获取战斗对象
		WarBean warBean = this.warsContianer.get(uid);
		if (warBean == null) {// 此人战斗过程不存在时
			return -1;
		}

		// 设置最后修改时间
		warBean.setLastUpdateTime(System.currentTimeMillis());

		// 获取英雄
		String key_heros = String.format("%d_%d", x, y);
		WarHeroBean warHeroBean = warBean.getHeroes().get(key_heros);
		if (warHeroBean != null) {// 此坐标上已经存在一个英雄
			return -2;
		}

		// TODO 此玩家是否有此英雄

		// 验证通过
		warHeroBean = new WarHeroBean(heroId, x, y);
		warBean.getHeroes().put(key_heros, warHeroBean);

		return 0;
	}

	/**
	 * 放置一个塔
	 * 
	 * @param uid
	 *            用户id
	 * @param towerId
	 *            塔的id
	 * @param x
	 *            放置塔的x轴
	 * @param y
	 *            放置塔的y轴
	 * 
	 * @return 0: 成功； -1: 战斗不存在；-2此坐标已经存在一个塔；-3此玩家没有此塔
	 */
	public int insertTower(long uid, int towerId, int x, int y) {
		// 获取战斗对象
		WarBean warBean = this.warsContianer.get(uid);
		if (warBean == null) {// 此人战斗过程不存在时
			return -1;
		}

		// 设置最后修改时间
		warBean.setLastUpdateTime(System.currentTimeMillis());

		// 获取塔
		String key_tower = String.format("%d_%d", x, y);
		WarTowerBean warTowerBean = warBean.getTowers().get(key_tower);
		if (warTowerBean != null) {// 此坐标上已经存在一个塔
			return -2;
		}

		// TODO 此玩家是否有此塔

		// 验证通过
		warTowerBean = new WarTowerBean(towerId, x, y);
		warBean.getTowers().put(key_tower, warTowerBean);

		return 0;
	}

	/**
	 * 减血操作
	 * 
	 * @param uid
	 *            用户id
	 * @param value
	 *            >0是加血，<0是减血
	 * @return 1：还剩下血，继续游戏 0: 空血了，过关失败； -1: 战斗不存在；
	 */
	public int lifebloodUpdate(long uid, int value) {
		// 获取战斗对象
		WarBean warBean = this.warsContianer.get(uid);
		if (warBean == null) {// 此人战斗过程不存在时
			return -1;
		}

		// 设置最后修改时间
		warBean.setLastUpdateTime(System.currentTimeMillis());

		// 减血
		int currentBlood = warBean.getLifebloodBean().update(value);
		if (currentBlood < 1) {
			return 0;
		}

		return 1;
	}

	/**
	 * 减魔力值操作
	 * 
	 * @param uid
	 *            用户id
	 * @param magicId
	 *            魔法id
	 * 
	 * @return 1：魔法值足够，可以释放 0: 魔力值空了，不能释放； -1: 战斗不存在；
	 */
	public int doMagic(long uid, int magicId) {
		// 获取战斗对象
		WarBean warBean = this.warsContianer.get(uid);
		if (warBean == null) {// 此人战斗过程不存在时
			return -1;
		}

		// 设置最后修改时间
		warBean.setLastUpdateTime(System.currentTimeMillis());

		// TODO 根据id获取此技能需要的魔法值
		int magicNeed = 50;

		// 判断是否有足够魔法
		if (warBean.getMagicBean().updateValue(magicNeed * (-1))) {
			return 1;
		} else {
			return 0;
		}

	}

	/**
	 * 消灭一个怪物
	 * 
	 * @param uid
	 *            用户id
	 * @param monsterId
	 *            怪物id
	 * 
	 * @return 1：成功消灭 0: 怪物个数不够； -1: 战斗不存在；-2怪物不存在于这个关卡
	 */
	public int killMonster(long uid, int monsterId) {
		// 获取战斗对象
		WarBean warBean = this.warsContianer.get(uid);
		if (warBean == null) {// 此人战斗过程不存在时
			return -1;
		}

		// 设置最后修改时间
		warBean.setLastUpdateTime(System.currentTimeMillis());

		// TODO 根据id获取此关卡要消灭的怪物个数
		int monster_need_num = 20;

		if (monster_need_num == 0) {// 如果没有需要消灭的怪物
			return -2;
		}

		int killed_num = warBean.getMonsters().get(monsterId);
		if (killed_num >= monster_need_num) {// 怪物个数不够
			return 0;
		}
		return 1;
	}
}
